From: Florian Müllner Date: Fri, 8 Nov 2019 17:00:05 +0000 (+0100) Subject: windowManager: Use Sets to track ongoing effects X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~781^2^2~445 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=cb7374b1ec0ecc43265668272984a8f5490140b1;p=gnome-shell.git windowManager: Use Sets to track ongoing effects We only care whether an effect is ongoing for an actor, not about any particular order. Sets are more convenient than arrays in that case, so use them instead. https://gitlab.gnome.org/GNOME/mutter/issues/655 https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/815 --- diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js index 97f4ef8a9..74d4faf7f 100644 --- a/js/ui/windowManager.js +++ b/js/ui/windowManager.js @@ -699,16 +699,16 @@ var WindowManager = class { constructor() { this._shellwm = global.window_manager; - this._minimizing = []; - this._unminimizing = []; - this._mapping = []; - this._resizing = []; - this._destroying = []; + this._minimizing = new Set(); + this._unminimizing = new Set(); + this._mapping = new Set(); + this._resizing = new Set(); + this._destroying = new Set(); this._movingWindow = null; this._dimmedWindows = []; - this._skippedActors = []; + this._skippedActors = new Set(); this._allowedKeybindings = {}; @@ -1256,7 +1256,7 @@ var WindowManager = class { } skipNextEffect(actor) { - this._skippedActors.push(actor); + this._skippedActors.add(actor); } setCustomKeybindingHandler(name, modes, handler) { @@ -1285,7 +1285,7 @@ var WindowManager = class { } _shouldAnimateActor(actor, types) { - if (this._removeEffect(this._skippedActors, actor)) + if (this._skippedActors.delete(actor)) return false; if (!this._shouldAnimate()) @@ -1298,15 +1298,6 @@ var WindowManager = class { return types.includes(type); } - _removeEffect(list, actor) { - let idx = list.indexOf(actor); - if (idx != -1) { - list.splice(idx, 1); - return true; - } - return false; - } - _minimizeWindow(shellwm, actor) { let types = [Meta.WindowType.NORMAL, Meta.WindowType.MODAL_DIALOG, @@ -1318,7 +1309,7 @@ var WindowManager = class { actor.set_scale(1.0, 1.0); - this._minimizing.push(actor); + this._minimizing.add(actor); if (actor.meta_window.is_monitor_sized()) { actor.ease({ @@ -1367,7 +1358,7 @@ var WindowManager = class { } _minimizeWindowDone(shellwm, actor) { - if (this._removeEffect(this._minimizing, actor)) { + if (this._minimizing.delete(actor)) { actor.remove_all_transitions(); actor.set_scale(1.0, 1.0); actor.set_opacity(255); @@ -1386,7 +1377,7 @@ var WindowManager = class { return; } - this._unminimizing.push(actor); + this._unminimizing.add(actor); if (actor.meta_window.is_monitor_sized()) { actor.opacity = 0; @@ -1433,7 +1424,7 @@ var WindowManager = class { } _unminimizeWindowDone(shellwm, actor) { - if (this._removeEffect(this._unminimizing, actor)) { + if (this._unminimizing.delete(actor)) { actor.remove_all_transitions(); actor.set_scale(1.0, 1.0); actor.set_opacity(255); @@ -1481,7 +1472,7 @@ var WindowManager = class { _sizeChangedWindow(shellwm, actor) { if (!actor.__animationInfo) return; - if (this._resizing.includes(actor)) + if (this._resizing.has(actor)) return; let actorClone = actor.__animationInfo.clone; @@ -1491,7 +1482,7 @@ var WindowManager = class { let scaleX = targetRect.width / sourceRect.width; let scaleY = targetRect.height / sourceRect.height; - this._resizing.push(actor); + this._resizing.add(actor); // Now scale and fade out the clone actorClone.ease({ @@ -1539,7 +1530,7 @@ var WindowManager = class { } _sizeChangeWindowDone(shellwm, actor) { - if (this._removeEffect(this._resizing, actor)) { + if (this._resizing.delete(actor)) { actor.remove_all_transitions(); actor.scale_x = 1.0; actor.scale_y = 1.0; @@ -1638,7 +1629,7 @@ var WindowManager = class { actor.scale_y = 0.05; actor.opacity = 0; actor.show(); - this._mapping.push(actor); + this._mapping.add(actor); actor.ease({ opacity: 255, @@ -1655,7 +1646,7 @@ var WindowManager = class { actor.scale_y = 0; actor.opacity = 0; actor.show(); - this._mapping.push(actor); + this._mapping.add(actor); actor.ease({ opacity: 255, @@ -1672,7 +1663,7 @@ var WindowManager = class { } _mapWindowDone(shellwm, actor) { - if (this._removeEffect(this._mapping, actor)) { + if (this._mapping.delete(actor)) { actor.remove_all_transitions(); actor.opacity = 255; actor.set_pivot_point(0, 0); @@ -1709,7 +1700,7 @@ var WindowManager = class { switch (actor.meta_window.window_type) { case Meta.WindowType.NORMAL: actor.set_pivot_point(0.5, 0.5); - this._destroying.push(actor); + this._destroying.add(actor); actor.ease({ opacity: 0, @@ -1723,7 +1714,7 @@ var WindowManager = class { case Meta.WindowType.MODAL_DIALOG: case Meta.WindowType.DIALOG: actor.set_pivot_point(0.5, 0.5); - this._destroying.push(actor); + this._destroying.add(actor); if (window.is_attached_dialog()) { let parent = window.get_transient_for(); @@ -1746,7 +1737,7 @@ var WindowManager = class { } _destroyWindowDone(shellwm, actor) { - if (this._removeEffect(this._destroying, actor)) { + if (this._destroying.delete(actor)) { let parent = actor.get_meta_window().get_transient_for(); if (parent && actor._parentDestroyId) { parent.disconnect(actor._parentDestroyId);